
#include "hal_aw_86802_tempsensor.h"

#ifdef AW_86802

#include <stdint.h>


u16 ts_temp = 0; //default factory temprature
u16 ts_adc = 0;   //default factory temprature adc 
u8 ts_flag = 0;

void Temp_FactorInit(void)
{
	u32 nvr_dat[NVR_TMP_FLG_LEN] = {00,00,00};

	CLK->ISP_CLK_EN |= CFG_CLK_EN;
	flash_read_many_nvr(NVR_ADR_TMP, (AW_U8 *)nvr_dat, NVR_TMP_BYTE_LEN);

	if (nvr_dat[2] == TMP_IC_FLG) 
	{
		ts_temp = ((nvr_dat[0] & 0xFF) / 16) * 10 + (nvr_dat[0] & 0x0F); // TS_TEMP
		ts_adc = nvr_dat[1] & 0xFFFF; // TS_ADC_CODE
		ts_flag = 1;
	}
}

void HAL_TempSensor_Init(void)
{
	Temp_FactorInit();
}

////////////////////////////////////////////////////////////////////////////////

extern u16 hal_temp_adc_get(void);

float hal_temperature_read(void)
{
	u16 tmp_data = 0;
	u16 temp_adc;

	temp_adc = hal_temp_adc_get();

	if (ts_flag)
	{
		tmp_data = (ts_temp * 10 - (100 * (temp_adc - ts_adc) / 213));
	}
	else
	{
		tmp_data = (8660 - temp_adc) * 1000 / 2124;
	}

	return (float)(tmp_data/10.0);

}

#endif
